package xorm

import (
	"gitee.com/stevenchin/gin_study/xorm/initxorm"
	"github.com/gin-gonic/gin"
	"net/http"
)

/**
更新数据。支持执行SQL与ORM两种方式查询数据
*/

// 一. ORM方式更新数据
// 1. 更新数据使用Update方法，Update方法的第一个参数为需要更新的内容，可以为一个结构体指针或者一个Map[string]interface{}类型。
//    当传入的为结构体指针时，只有非空和非0的field才会被作为更新的字段。当传入的为Map类型时，key为数据库Column的名字，value为要更新的内容
//    需要更新一个值为0或nil有两种选择：
// 		· 通过添加Cols函数指定需要更新结构体中的哪些值，未指定的将不更新，指定了的即使为0也会更新。例如：
//  	   affected, err := orm1.Engine.Id(id).Cols("age").Update(&basic)
//		· 通过传入map[string]interface{}来进行更新，但这时需要额外指定更新到哪个表，因为通过map是无法自动检测更新哪个表的：
//		   ffected, err := orm1.Engine.Table(new(basic)).Id(id).Update(map[string]interface{}{"age":0})
//
// 2. 乐观锁Version。要使用乐观锁，需要使用version标记结构体。例如
// 		type User struct {
// 			Id int64
// 			Name string
// 			Version int `xorm:"version"`
// 		}
// 如有需要可查阅：
func update(ctx *gin.Context) {

	basi := new(basic)
	basi.Id = 1
	basi.Name = "steven update1"
	// UPDATE `basic` SET `Name` = ?, `create_time` = ? WHERE `Id`=? [steven update1 1593251982 1]
	_, _ = initxorm.Engine.ID(basi.Id).Update(basi)
	ctx.String(http.StatusOK, "update success")
}

// 二. 执行SQL命令更新数据。这里不做介绍，如有需要可查阅：https://www.kancloud.cn/xormplus/xorm/167114
